<?php
/**
 * @author Chashin Evgeniy
 * Класс для получения ip адресов с сервиса ipgeobase.ru
 */
class Store_Model_Geo {
	protected $server_url = "ipgeobase.ru:7020/geo?ip=";
	protected $fields_arr = array ("city" ); // список запрашиваемых полей
	protected $cache = array ();
	
	public function getCache() {
		$cache = Zen_Cache_Factory::get('geo');
		$cache->setLifetime('3600 * 60 * 24');
	    $cache->clean(Zend_Cache::CLEANING_MODE_OLD);
		return $cache;
	}
	
	/**
	 * Создание класса и запрос к серверу
	 * @param $AIpList список ip адресов, строкой либо строкой через запятую либо массивом
	 * @return bool
	 */
	public function getData($ip) {
		
		/**
		 * Проверка правильности ip адреса
		 */
		$validator = new Zend_Validate_Ip ();
		if (!$validator->isValid ( $ip )) {
			return false;
		}
		/*
		$cache = $this->getCache ();
		$cache_id = 'geo'.md5($ip);
		$data=false;
		if ($cache->load ( $cache_id )) {
			$cont = $cache->load ( $cache_id );
			if(isset($cont[$ip])){
				$data=$cont[$ip];
			}
			
		} else {
		*/	
			$cont = array ();
			$xml = @simplexml_load_file ( "http://ipgeobase.ru:7020/geo?ip=" . $ip );
			if ($xml) {
				if (isset ( $xml->ip )) {
					$data = get_object_vars ( $xml->ip );
					if (!isset($data['message'])){
						unset($data['@attributes']);
						$cont[$ip]=$data;
						//$cache->save($cont,$cache_id);
					}else{
						$data=false;
					}
				}
			}else{
				return false;
			}
			
		//}
		
		return $data;
	}
	
	/**
	 * Возвращает запрошенное поле для ip адреса
	 * @param $AIp        IP адрес
	 * @param $AFiledName Поле
	 * @return string
	 */
	public function getInfo($ip=false) {
		if($ip==false){
			$ip=Zen_User::getip();
		}
		$data = $this->getData ($ip);
		return $data;
	}
	
	static  function getCoord($address){
		$adress=preg_replace('/\040/','+',$address);
		$cnf=Zend_Registry::get('cnf');
		$apikey=$cnf->yandexmapskey;
		$request = 'http://geocode-maps.yandex.ru/1.x/?geocode=' . $adress . '&format=json&key=' . $apikey;
		
		$ch = curl_init (); // инициализация
		curl_setopt($ch, CURLOPT_URL, $request ); // адрес страницы для скачивания
		curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7"); // каким браузером будем прикидываться
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); // нам нужно вывести загруженную страницу в переменную
		
		try {
			$data = curl_exec ( $ch ); // скачиваем страницу
			curl_close ( $ch );
		} catch ( Exception $e ) {
			$data = false;
		}
		
		if ($data != false) {
			$data = json_decode ( $data, true );
			
			if (isset ( $data ['response'] ['GeoObjectCollection'] ['featureMember'] ['0'] ['GeoObject'] ['Point'] ['pos'] )) {
				$coord = $data ['response'] ['GeoObjectCollection'] ['featureMember'] ['0'] ['GeoObject'] ['Point'] ['pos'];
			} else {
				$coord = NULL;
			}
		}
		return $coord;
	}

	

}

?>